<?php
require_once('../conf/config.php');
require_once('../phpmailer/validar_email.php');
require_once('../phpmailer/class.phpmailer.php');
require_once('../phpmailer/class.smtp.php');

// Esta funcion inserta un email y un nombre en la base de datos solo cuando se cumplen las
// condiciones siguientes:
// El mail es válido
// El nombre de usuario es de al menos una letra y no está repetido
// Se consigue enviar un email al correo del usuario (o al menos se ha intentado).
//
// Al insertar en la base de datos el nuevo usuario se crea como un usuario Sin autentificar.
// La base de datos ejecuta cada día un script que borra todos los que aun no se hayan identificado
// por primera vez.
// La función devuelve un array con dos valores:
// exito indica si ha habido éxito o no (true, false).
// En el caso de ser false, mensaje contiene el mensaje de error que se debe mostrar. 

function insertarUsuario($mail, $nombre){
	// Inicializamos el vector que se devolverá
	$retorno = array('exito' => false, 'mensaje' => '');
	$config = new Config();

	// Conectamos a la base de datos
	$conn_reg = new mysqli($config->url(), $config->user(), $config->pass(), $config->name());
	if($conn_reg->connect_error){
		echo 'Fallo al conectar a MySQL: ' . $conn_reg->connect_errno . ' ' . $conn_reg->connect_error;
		die('Fallo al conectar a MySQL: ' . $conn_reg->connect_errno . ' ' . $conn_reg->connect_error);
	}

	// Escapamos todo lo que pasamos, que hay gente con muy mala sombra
	$mail_nc = $conn_reg->real_escape_string($mail);
	$nombre_nc = $conn_reg->real_escape_string($nombre);
	
	// Validamos el nombre y el mail
	if(!validar_email($mail_nc)){
		$retorno['mensaje'] .= '<p>La dirección de correo a dar de alta no parece válida.</p>';
		$con_reg->close();
		return $retorno;
	}
	if(strlen($nombre_nc)<=0 || strlen($nombre_nc)>=49){
		$retorno['mensaje'] .= '<p>El nombre de usuario no puede estar vacio y debe tener menos de 49 caracteres.</p>';
		$con_reg->close();
		return $retorno;
	}
	
	// Creamos una consulta para comprobar que no existe el mail y la ejecutamos
	$query_reg = "SELECT Id FROM Usuarios WHERE Email = '$mail_nc'";
	if(!($result_reg = $conn_reg->query($query_reg))){
		echo 'Query invalido: ' . $query_reg;
		die('Query invalido: ' . $query_reg);
	}
	if($result_reg->num_rows > 0){
		$retorno['mensaje'] .= '<p>El correo que se ha indicado ya existe en Valengeoarte.</p>';
		$result_reg->close();
		$con_reg->close();
		return $retorno;
	}
	$result_reg->close();
	
	// Creamos una consulta para comprobar que no existe el nombre y la ejecutamos
	$query_reg = "SELECT Id FROM Usuarios WHERE Nombre = '$nombre_nc'";
	if(!($result_reg = $conn_reg->query($query_reg))){
		echo 'Query invalido: ' . $query_reg;
		die('Query invalido: ' . $query_reg);
	}
	if($result_reg->num_rows > 0){
		$retorno['mensaje'] .= '<p>El nombre de usuario que ha solicitado ya está en uso en Valengeoarte.</p>';
		$result_reg->close();
		$con_reg->close();
		return $retorno;
	}
	$result_reg->close();
	
	// Creamos la contraseña y la dejamos en $pass_reg
	$pass_reg = '';
	$tamanyo_pass = 7;
	$caracteres_pass = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
	$tamanyo_caracteres_pass = strlen($caracteres_pass);
	for($cont = 0; $cont < $tamanyo_pass; $cont++ ) $pass_reg .= $caracteres_pass[rand(0, $tamanyo_caracteres_pass - 1)];
	
	// Enviamos el correo
	$correo_reg = new PHPMailer();
	$correo_reg->IsSMTP();
	$correo_reg->SMTPAuth = true;
	$correo_reg->SMTPSecure = "ssl";
	$correo_reg->Host = "smtp.gmail.com";
	$correo_reg->Port = 465;
	$correo_reg->Username = "valengeoarte@gmail.com";
	$correo_reg->Password = "Megatron";
	$correo_reg->From = "valengeoarte@gmail.com";
	$correo_reg->FromName = "Valengeoarte";
	$correo_reg->Subject = "Gracias por registrarte en Valengeoarte";
	$correo_reg->ContentType = 'text/plain';
	$correo_reg->IsHTML(false);
	$correo_reg->AddAddress($mail_nc);
	$correo_reg->SetFrom("valengeoarte@gmail.com");
	$correo_reg->Body('Hola ' .$nombre_nc .', gracias por darte de alta en Valengeoarte. Te recordamos que para ingresar en la web debes poner la contraseña ' . $pass_reg . ' y el mail ' . $mail_nc);
	if(!$correo_reg->Send()){
		$retorno['mensaje'] .= '<p>Ha habido un error al mandarle el correo con su contraseña. Por favor, inténtelo más tarde.</p>';
		$con_reg->close();
		return $retorno;
	}
		
	// Los datos son correctos y se ha podido enviar el correo. Insertamos en la base de datos al usuario sin autentificar.
	$query_reg = "INSERT INTO Usuarios (Nombre, Email, Password, Avatar, Fecha, Estado, FechaFinBaneo, ";
	$query_reg .= "FechaUltimaVisita) VALUES ('$nombre_nc', $mail_nc, 'SHA1($pass_reg)', 'NULL', CURDATE(), ";
	$query_reg .= "'Sin', CURDATE(), CURDATE())";
	if(!($conn_reg->query($query_reg))){
		echo 'Query invalido: ' . $query_reg;
		die('Query invalido: ' . $query_reg);
	}
	// Liberamos el resultset, cerramos la conexion y devolvemos un éxito
	$retorno['exito'] = true;
	$result_reg->close();
	$con_reg->close();
	return $retorno;
	
}
?>
